package org.lcp.gatlingqueue.interfaces.part;

/**
 * 枪管(先进先出队列、头进尾出队列)
 * 
 * @author lcp
 * 
 */
public interface Barrel<T> {

	/**
	 * 队列形式从右到左的顺序
	 * ******** 1.初始的 *********
	 * 
	 *  tail  head
	 *    \    /
	 *    object_1
	 * 
	 * ********* 2.添加一个 *********
	 * 
	 * tail         head
	 *  |             |
	 * object_2<-object_1
	 * 
	 * ********* 3.删除一个 *********
	 * 
	 * tail  head
	 *  |    /
	 * object_2
	 * 
	 */
	
	/**
	 * 入队
	 * 
	 * @param object
	 */
	public void in(T object);

	/**
	 * 出队
	 * 
	 * @return
	 */
	public T out();

	/**
	 * 得到全部数据
	 * 
	 * @return
	 */
	public T[] getSequeueCopy();

	/**
	 * 得到下一卡口
	 * 
	 * @return
	 */
	public Barrel<T> getNext();

	/**
	 * 设定下一卡口
	 * 
	 * @param barrel
	 */
	public void setNext(Barrel<T> barrel);

	/**
	 * 得到枪管序号
	 * 
	 * @return
	 */
	public int getNumber();
}
